/**
 * 全局弹窗管理器
 * 统一管理弹窗的 z-index、队列、层级关系
 */

// Z-Index 配置
const Z_INDEX_CONFIG = {
  BASE: 1000,           // 基础层级
  STEP: 100,            // 每层递增
  MAX_LEVEL: 10,        // 最大层级数
  
  // 预定义层级
  LEVELS: {
    NORMAL: 1000,       // 普通弹窗
    IMPORTANT: 2000,    // 重要弹窗
    CRITICAL: 3000,     // 关键弹窗
    SYSTEM: 9000        // 系统级弹窗
  }
}

class ModalManager {
  constructor() {
    this.currentLevel = 0        // 当前层级
    this.modalStack = []         // 弹窗栈
    this.zIndexMap = new Map()   // z-index映射表
  }
  
  /**
   * 注册弹窗，获取 z-index
   * @param {String} id - 弹窗唯一标识
   * @param {String} priority - 优先级 (normal/important/critical/system)
   * @returns {Number} z-index值
   */
  register(id, priority = 'normal') {
    // 如果已经注册过，返回已有的 z-index
    if (this.zIndexMap.has(id)) {
      return this.zIndexMap.get(id)
    }
    
    // 根据优先级计算基础 z-index
    let baseZIndex = Z_INDEX_CONFIG.LEVELS.NORMAL
    if (priority === 'important') {
      baseZIndex = Z_INDEX_CONFIG.LEVELS.IMPORTANT
    } else if (priority === 'critical') {
      baseZIndex = Z_INDEX_CONFIG.LEVELS.CRITICAL
    } else if (priority === 'system') {
      baseZIndex = Z_INDEX_CONFIG.LEVELS.SYSTEM
    }
    
    // 计算实际 z-index
    const zIndex = baseZIndex + (this.currentLevel * Z_INDEX_CONFIG.STEP)
    
    // 检查是否超过最大层级
    if (this.currentLevel >= Z_INDEX_CONFIG.MAX_LEVEL) {
      console.warn(`[ModalManager] 弹窗层级达到最大值 ${Z_INDEX_CONFIG.MAX_LEVEL}`)
    }
    
    // 记录弹窗信息
    this.modalStack.push({ id, priority, zIndex, timestamp: Date.now() })
    this.zIndexMap.set(id, zIndex)
    this.currentLevel++
    
    console.log(`[ModalManager] 注册弹窗: ${id}, z-index: ${zIndex}, 当前层级: ${this.currentLevel}`)
    
    return zIndex
  }
  
  /**
   * 注销弹窗，释放 z-index
   * @param {String} id - 弹窗唯一标识
   */
  unregister(id) {
    const index = this.modalStack.findIndex(item => item.id === id)
    
    if (index !== -1) {
      this.modalStack.splice(index, 1)
      this.zIndexMap.delete(id)
      this.currentLevel = Math.max(0, this.currentLevel - 1)
      
      console.log(`[ModalManager] 注销弹窗: ${id}, 当前层级: ${this.currentLevel}`)
    }
  }
  
  /**
   * 获取弹窗的 z-index
   * @param {String} id - 弹窗唯一标识
   * @returns {Number|null} z-index值
   */
  getZIndex(id) {
    return this.zIndexMap.get(id) || null
  }
  
  /**
   * 获取顶层弹窗
   * @returns {Object|null} 弹窗信息
   */
  getTopModal() {
    return this.modalStack.length > 0 
      ? this.modalStack[this.modalStack.length - 1] 
      : null
  }
  
  /**
   * 检查是否为顶层弹窗
   * @param {String} id - 弹窗唯一标识
   * @returns {Boolean}
   */
  isTopModal(id) {
    const topModal = this.getTopModal()
    return topModal ? topModal.id === id : false
  }
  
  /**
   * 关闭所有弹窗
   */
  closeAll() {
    this.modalStack = []
    this.zIndexMap.clear()
    this.currentLevel = 0
    
    console.log('[ModalManager] 关闭所有弹窗')
  }
  
  /**
   * 获取当前打开的弹窗数量
   * @returns {Number}
   */
  getModalCount() {
    return this.modalStack.length
  }
  
  /**
   * 获取所有弹窗信息（调试用）
   * @returns {Array}
   */
  getModalStack() {
    return [...this.modalStack]
  }
  
  /**
   * 检查是否有弹窗打开
   * @returns {Boolean}
   */
  hasModal() {
    return this.modalStack.length > 0
  }
}

// 创建全局单例
const modalManager = new ModalManager()

export default modalManager

// 导出配置供其他模块使用
export { Z_INDEX_CONFIG } 